import axios from '../utils/axios'
import qs from 'qs'
import {
  // API_HOST,
  ANDROID
} from '@/config'

// 请求配置
let config = {
  // baseURL: API_HOST,
  headers: {},
  transformRequest: [transformRequest]
}
// 业务代码
let serviceCode = null
/**
 * 接口请求
 * @param url [String] 选填 接口地址
 * @param code [String] 必填 业务代码
 * @param params [Object] 选填 接口查询参数
 * @returns {*|void|AxiosPromise<any>}
 */
export default function (url = null, code, params) {
  return new Promise((resolve, reject) => {
    if (url && code && typeof code === 'string') {
      serviceCode = code
      return axios.post(url, params, config).then(r => {
        if (r.data.head && r.data.head.code === '10000') {
          resolve(r.data.para)
        } else if (r.data.head) {
          reject(r.data.head)
        } else {
          reject(r.data)
        }
      }).catch(err => {
        reject(err)
      })
    } else {
      let err = {msg: '方法调用参数有误,查证后再调用!'}
      reject(err)
    }
  })
}

/**
 * 提交数据转换
 * 对 data 进行转换处理
 * @param data
 * @returns {*}
 */
function transformRequest(data) {
  // 初始 Request 键值对
  let currentParams = {
    request: JSON.stringify(mergeParams(data))
  }
  console.log('请求参数:', currentParams)
  return qs.stringify(currentParams) // 序列化数据后提交
}

/**
 * 附加参数混合
 * @param data
 * @returns {{}}
 */
function mergeParams(data) {
  let mergeP = {}
  // 从Android 端 getHead() 获取请求验证相关信息
  if (ANDROID && serviceCode) {
    mergeP = JSON.parse(ANDROID.getHead(serviceCode))
  }
  return Object.assign(mergeP, {para: data})
}

/**
 * 获取Android传过来的页面查询条件 外用
 * getQuery.call(this,{param})  建议必须这样使用
 * @param {Object} q 传入查询条件 * 模拟数据请求的时候有用,正式可以不用此参数
 * @returns {Promise<any>} 响应数据条件对象
 */
export function getQuery(q = {}) {
  let queryRoute = (this && this.$route && this.$route.query) || {}
  let query = ANDROID.getQuery(q)
  if (query && query !== '') {
    query = Object.assign(JSON.parse(query), queryRoute)
  } else {
    query = queryRoute
  }
  return new Promise((resolve, reject) => {
    resolve(query)
  })
}

/**
 * 向Android 存入车辆相关数据对象
 * @param {object} obj 车辆数据对象
 * @param {string} obj.clpp 车辆品牌
 * @param {string} obj.clsyr 车辆所有人
 * @param {string} obj.cph 车牌号
 * @param {string} obj.fdjh 车辆发动机号
 * @param {string} obj.sfzh 车主身份证号
 * @param {string} obj.xp 车辆相片 Base64
 */
export function insertCarTrack(obj = {}) {
  if (typeof obj === 'object') {
    ANDROID.getQuery(JSON.stringify(obj))
  }
}
